﻿/// <reference path="/Scripts/Base/jquery-1.7.1.js" />
/// <reference path="/Scripts/Base/jquery-ui-1.8.20.js" />
/// <reference path="/Scripts/Page/Shared/RangePicker.js" />

$(function () {
    var selectorContainerSuffix = "selector-container";
    var dateSelectorPrefix = "date-";
    var timeSelectorPrefix = "time-";

    var beginSelector = "log-begin-date";
    var endSelector = "log-end-date";

    var closeTextForDialog = '[X]';

    function Init() {

    }; Init();

    function ReloadPage() {
        window.location.reload();
    }

    function CloseDialog(){
        $(".ui-dialog-titlebar-close").click();
    }

    //
    // visszaadja, hogy van-e lezáratlan bejegyzés
    //
    function AnyUnClosedEntry() {
        return $(".entry-isclosed[value!='True'").length > 0;
    }

    //
    // Ajax request számára formázott string-et ad vissza
    // javascript Date objektumból
    //
    function GetDateFormattedForAjax(dateObject) {
        //var dateTemplate = "dd/mm/yyyy HH:MM";
        var dateTemplate = 'yyyy-mm-dd HH:MM:00';
        dateTemplate = dateTemplate
                .replace("yyyy", dateObject.getFullYear())
                .replace("dd", dateObject.getDate())
                .replace("mm", dateObject.getMonth() + 1)
                .replace("HH", dateObject.getHours())
                .replace("MM", dateObject.getMinutes());
        return dateTemplate;
    }

    //
    // egyedileg formázott datetime értéket alakít dátum objektummmá.
    //
    function ParseDateString(dateString) {
        var dateParts = dateString.split("#");
        var date = new Date(
            dateParts[2],
            dateParts[1] - 1,
            dateParts[0],
            dateParts[3],
            dateParts[4],
            0, 0);
        //debugger;
        return date;
    }

    function GetLastEndDate() {
        if ($(".log-entry-end-date").length < 1) {
            return new Date(1900, 1, 1, 1, 1, 1, 1);
        } else {
            var endDateString = $(".log-entry-end-date").last().attr("data-date");
            //debugger;
            var lastEndDate = ParseDateString(endDateString);
            return lastEndDate;
        }
    }

    function GetLastBeginDate() {
        if ($("#log-entries .log-entry-begin-date").length < 1) {
        } else {
            var beginDateString = $("#log-entries .log-entry-begin-date").last().attr("data-date");
            //debugger;
            var lastBeginDate = ParseDateString(beginDateString);
            return lastBeginDate;
        }
    }

    function GetLastEntryId() {
        var lastEntry = $("#log-entries .log-entry-additional-actions").last().find(".entry-id");
        //debugger;
        if (typeof lastEntry == "undefined") {
            return "0";
        } else {
            return lastEntry.val();
        }
    }

    /*
    * Visszaadja, hogy a 'dateToCheck' dátum
    * a 'dateFrom' és 'dateTo' közé esik-e
    */
    function IsDateBetweenDates(dateFrom, dateTo, dateToCheck) {
        return dateToCheck > dateFrom && dateToCheck < dateTo;
    }

    function GetRangeValueSelected(rangeSelectorObject) {
        //debugger;
        //lekérjük mind a kiválasztott, mind a default értéket
        var defaultValue = rangeSelectorObject.find(".range-default");
        var selectedValue = rangeSelectorObject.find(".range-selected");
        var result = '';
        //ha a default érték jelen van
        if (defaultValue.length > 0) {
            result = defaultValue.text();
        } else {
            //ha a kiválasztott érték jelen van
            if (selectedValue.length > 0) {
                result = selectedValue.text();
            } else { alert("no value from range value selector"); }
        }
        result = result.replace("\n", '').trim();
        //debugger;
        return result;
    }

    function GetRangeValueFromSelector(containerDivId, selectorTypePrefix) {
        var resultArray = new Array();
        try {
            var childFilter = "." + selectorTypePrefix + selectorContainerSuffix + " ." + selectorContainerSuffix;
            //alert(childFilter);
            $("#" + containerDivId).find(childFilter).each(function () {
                //get range default or range value selected
                var result = GetRangeValueSelected($(this));
                if (typeof result != "undefined") {
                    resultArray.push(parseInt(result));
                }
            });
        } catch (e) {
            debugger;
        }

        return resultArray;
    }

    function GetDateFromSelector(container, timeSelPrefix, dateSelPrefix) {
        //get begin date
        var dateAsArray = GetRangeValueFromSelector(container, dateSelPrefix);
        //get begin time
        var timeAsArray = GetRangeValueFromSelector(container, timeSelPrefix);

        //debugger;
        if (dateAsArray.length == 3 && timeAsArray.length == 2) {
            var dateFromArrays = new Date(dateAsArray[0], dateAsArray[1] - 1, dateAsArray[2], timeAsArray[0], timeAsArray[1]);
            //debugger;
            return dateFromArrays;
        }
    }

    function GetBeginDateAndTime() {

        var beginDate = GetDateFromSelector(beginSelector, timeSelectorPrefix, dateSelectorPrefix);
        return beginDate;
    }

    function GetEndDateAndTime() {
        var endDate = GetDateFromSelector(endSelector, timeSelectorPrefix, dateSelectorPrefix);
        return endDate;
    }

    function GetEndDateChecked() {
        var result = $("#log-end-date-check").find(".check-container").attr("data-checked") === 'true';
        return result;
    }

    /*
      * az 'errorDivId' id-jű div-ben megjeleníti a szöveget,
      * majd kis idő után eltünteti azt.
    */
    function ShowErrorMessage(errorDivId, message) {
        //lépések:
        //1. szöveg beállítása
        //2. kis idő után (settimeout) szöveg eltüntetése
        //3. szöveg kitörlése, láthatóság visszaállítása
        $("#" + errorDivId).text(message);
        setTimeout(function () {
            $("#" + errorDivId).hide({
                duration: 500,
                effect: "fold",
                complete: function () {
                    $("#" + errorDivId)
                        .text('')
                        .show();
                    //debugger;
                },
            });
        }, 4500);
    }

    /*
     * Visszaadja, hogy az adott dátum bármely más bejegyzés közé esik-e
    */
    function IsDateBetweenEntryBeginAndEnd(dateObject) {
        //return true;
        var result = false;

        $(".log-entry").each(function () {
            var beginDate = ParseDateString($(this).find(".log-entry-begin-date").attr("data-date"));
            var endDateString = $(this).find(".log-entry-end-date").attr("data-date");
            //ha a végdátum definiálva van, vizsgálható hogy a paraméter ezek közé esik-e
            if (typeof endDateString != "undefined" && endDateString != '') {
                var endDate = ParseDateString(endDateString);
                //debugger;
                if (IsDateBetweenDates(beginDate, endDate, dateObject)) {
                    result = true;
                }
            } else {
            }
        });

        return result;
    }

    /*
        paraméterek:
        - entryBegin        : kezdődátum
        - entryEnd          : végdátum (lehet null)
        - InitialEntryType  : kezdő bejegyzés típusa
        - InitialEntry      : kezdő bejegyzés szövege
    */
    function AddNewEntry(entryBegin, entryEnd, InitialEntryType, InitialEntry) {
        $.ajax({
            url: '/SEMLog/AddLogEntry',
            type: "POST",
            data: {
                EntryBegin: entryBegin,
                EntryEnd: entryEnd,
                InitialEntryType: InitialEntryType,
                InitialEntry: InitialEntry,
            },
            success: function (data) {
                if (typeof data.ErrorMessage == "undefined") {
                    if (typeof data.Result != "undefined") {
                        ReloadPage();
                    } else {
                        debugger;
                    }
                } else {
                    //valamilyen hiba történt
                    alert(data.ErrorMessage);
                }

            },
            error: function (jqXhr, error, errorthrown) {
                debugger;
            }
        });
    }

    function CloseEntry(entryId, dateSelected) {
        var dateForAjax = GetDateFormattedForAjax(dateSelected);

        $.ajax({
            url: 'SEMLog/CloseEntry',
            type: 'POST',
            data: { entryId: entryId, closeDate: dateForAjax },
            success: function (data) {
                if (data == "Success") {
                    window.location.reload();
                }
                else {
                    alert("Hiba történt");
                }
            },
            error: function (a, b, c) {
                debugger;
            }
        });
    };

    function EditEntryPart(entryId, entryPartId, entryPartType, entryPartDescription) {
        //ajax hívás
        //debugger;
        $.ajax({
            url: 'SEMLog/EditEntryPart',
            type: 'POST',
            data: {
                Id: entryPartId,
                EntryPartType: entryPartType,
                LogEntryId: entryId,
                PartDescriptions: entryPartDescription,
            },
            success: function (data) {
                if (data != null && typeof data.View != "undefined") {
                    if ($(".entry-part[data-part-id=" + entryPartId + "]").length == 1) {
                        $(".entry-part[data-part-id=" + entryPartId + "]").replaceWith(data.View);
                        CloseDialog();
                    } else {
                        //debugger;
                        ReloadPage();
                    }
                } else {
                    alert(data.Error);
                }
            },
            error: function (a, b, c) {
                debugger;
            },
        });
    };

    function DeleteEntryPart(entryId, entryPartId) {
        $.ajax({
            url: 'SEMLog/DeleteEntryPart',
            type: 'POST',
            data: {
                Id: entryPartId,
                LogEntryId: entryId,
            },
            success: function (data) {
                if (data != null && data.Success) {
                    if ($(".entry-part[data-part-id=" + entryPartId + "]").length == 1) {
                        $(".entry-part[data-part-id=" + entryPartId + "]").hide({
                            duration: 1500,
                            effect: "fold",
                            complete: function () {
                                $(".entry-part[data-part-id=" + entryPartId + "]").remove();
                            }
                        });
                        CloseDialog();
                    } else {
                        debugger;
                    }
                } else {
                    debugger;
                }
            },
            error: function (a, b, c) {
                debugger;
            },
        });
    }

    $(".styled-select select").change(function () {
        $(this).parent().focus();
    });

    $("#btn-add-log-entry").click(function () {
        try {
                //hozzáadási dialógus ablak megnyitáása
                var dialogDiv = $("#log-entry-add-container");
                if (dialogDiv.length > 0) {
                    dialogDiv.dialog({
                        draggable: false,
                        modal: true,
                        show: { duration: 500, effect: "fold" },//"fold",
                        height: 400,
                        width: 800,
                        closeText: closeTextForDialog,
                        open: function () {
                            //az input szövegre fókuszálunk
                            $("#entry-part").focus();
                        }
                    });
                }
                else {
                    debugger;
                }
        } catch (e) {
            debugger;
        }
    });

    $("#btn-log-add-submit").click(function () {
        //debugger;
        //begyűjtjük a form-on elérhető adatokat:
        // * kezdődátum
        // * végdátum
        // * végdátum kiválasztva van-e.
        // * mi a kezdeti bejegyzés típusa
        // * mi a kezdeti üzenet
        var beginDate = GetBeginDateAndTime();
        var endDate = GetEndDateAndTime();
        var isEndDateChecked = GetEndDateChecked();
        var initEntryType = $(".add-begin-entry").find("select").val();
        var initEntryText = $("#begin-log-entry").val();
        //validáljuk az adatokat
        //a validálás szabálya:
        //ha a kezdeti dátum egy másik bejegyzés kezdő és végpontja közé esik ->hiba
        //ha a végdátum checkboxa bekattintott és ha a kezdeti dátum korábbi mint a végdátum ->hiba
        //ha a végdátum checkboxa bekattintott és ha végdátum egy másik bejegyzés kezdő és végpontja közé esik
        //bejegyzés szövege nem lehet üres
        var formValid = true;
        //debugger;
        if (IsDateBetweenEntryBeginAndEnd(beginDate)) {
            ShowErrorMessage("error-begin-date", "Dátum más bejegyzés kezdő és végdátuma között!");
            formValid = false;
        }
        if (isEndDateChecked && beginDate > endDate) {
            ShowErrorMessage("error-end-date", "Végdátum korábbi mint kezdő dátum");
            formValid = false;
        }
        if (isEndDateChecked && IsDateBetweenEntryBeginAndEnd(endDate)) {
            ShowErrorMessage("error-end-date", "Dátum más bejegyzés kezdő és végdátuma között!");
            formValid = false;
        }
        if (initEntryText == '') {
            ShowErrorMessage("error-begin-entry", "Kezdeti bejegyzés hiányzik");
            formValid = false;
        }
        if (AnyUnClosedEntry()) {
            alert("Van nem lezárt bejegyzés!");
            formValid = false;
        }

        if (formValid) {
            var entryBeginDateText = GetDateFormattedForAjax(beginDate);
            var entryEndDateText = isEndDateChecked ? GetDateFormattedForAjax(endDate) : null;
            AddNewEntry(entryBeginDateText, entryEndDateText, initEntryType, initEntryText);
        } else {
            
        }
        //debugger;
    });

    $("#btn-entry-add-part-after").live("click", function () {
        var dialogDiv = $("#log-entry-part-add-partial");
        var entryId = $(this).parent().parent().find(".entry-id").val();

        dialogDiv.find(".entry-id").val(entryId);
        if (dialogDiv.length > 0) {
            dialogDiv.dialog({
                draggable: false,
                modal: true,
                show: { duration: 500, effect: "fold" },
                height: 170,
                width: 600,
                closeText: closeTextForDialog,
                open: function () {
                    $("#txt-add-description").focus();
                }
            });
        }
        else {
            debugger;
        }
    });

    $("#btn-add-log-part").click(function () {
        var selectedEntryPartType = $("#entry-part-inputs").find("select").val();
        var entryPartText = $("#entry-part-inputs").find("textarea").val();
        var logEntryId = $(".entry-part-form-submit").find(".entry-id").val();
        if (entryPartText == '') {
            ShowErrorMessage("error-entrypart-desc", "Hiányzó bejegyzés-szöveg");
        } else {
            $.ajax({
                url: 'SEMLog/AddLogEntryPart',
                type: "POST",
                data: {
                    EntryPartType: selectedEntryPartType,
                    PartDescriptions: entryPartText,
                    logentryId: logEntryId
                },
                success: function (data) {
                    $(".entry-parts").append(data);
                    CloseDialog();
                },
                error: function (a, b, c) {
                    debugger;
                }
            });
        }
    });

    $(".part-delete").live("click", function () {
        if (confirm("Biztos benne?")) {
            var currentEntryPartId = $(this).attr("data-id");
            var currentEntryId = $(this).attr("data-entry-id");
            DeleteEntryPart(currentEntryId, currentEntryPartId);
        }
    });

    $(".part-edit").live("click", function () {
        var currentDescription = $(this).parents(".entry-part").find(".part-description").text().trim();
        var currentEntryPartId = $(this).attr("data-id");
        var currentEntryId = $(this).attr("data-entry-id");
        $("#log-entry-edit-add-partial").dialog({
            modal:true,
            closeText: closeTextForDialog,
            show: { duration: 500, effect: "fold" },
            open: function () {
                $("#txt-edit-description").val(currentDescription).focus();
                $("#edit-entry-part-form").find("#edit-part-id").val(currentEntryPartId);
                $("#edit-entry-part-form").find("#edit-part-entry-id").val(currentEntryId);
                //debugger;
            }
        });
    });

    $("#btn-edit-log-part").live("click", function () {
        var newDescription = $("#txt-edit-description").val();
        var entryTypeId = $("#edit-entry-part-form").find("select").val();
        if (newDescription == "") {
            ShowErrorMessage("error-edit-entrypart-desc", "Üres szöveg");
        } else {
            var entryPartId = $(this).parents(".entry-part-form-submit").find("#edit-part-id").val();
            var entryId = $(this).parents(".entry-part-form-submit").find("#edit-part-entry-id").val();
            EditEntryPart(entryId, entryPartId, entryTypeId, newDescription);
        }
    });

    $("#btn-entry-close").live("click", function () {
        var beginDateRaw = $(this).parents(".log-entry").find(".log-entry-begin-date").attr("data-date");
        var entryId = $(this).parents(".log-entry").find(".entry-id").val();
        //debugger;
        $("#close-log-entry-container").dialog({
            width: 367,
            height: 250,
            closeText: closeTextForDialog,
            //modal:true,
            open:function(){
                $("#close-entry-begin-date").val(beginDateRaw);
                $("#close-entry-id").val(entryId);
            }
        });
    });

    $("#btn-close-entry").click(function () {
        //debugger;
        var formValid = true;
        var dateSelected = GetDateFromSelector("close-log-entry", timeSelectorPrefix, dateSelectorPrefix);
        if (IsDateBetweenEntryBeginAndEnd(dateSelected)) {
            formValid = false;
            ShowErrorMessage("error-close-date", "Lezárási dátum más bejegyzés közé esik");
        } else {
            var entryBeginDate = ParseDateString($(this).parents("#close-log-entry-form").find("#close-entry-begin-date").val());
            if (entryBeginDate > dateSelected) {
                ShowErrorMessage("error-close-date", "Lezárási dátum korábbi mint a kezdési");
                formValid = false;
            }
        }
        

        if (formValid) {
            //ha validáció sikeres ->bejegyzés lezárása
            var entryId = $("#close-entry-id").val();
            CloseEntry(entryId, dateSelected);
        } else {
            //debugger;
        }

    });

    $(".log-pictures-show").click(function () {
        var entryId = $(this).parentsUntil(".log-entry").find(".entry-id").val();
        if (entryId > 0) {
            window.location = "/SEMLog/LogEntryPictures?logEntryId=" + entryId;
        }
    });
});